package com.code.p9.工厂方法模式.P2通用工厂模式;

/**
 * 描述: 具体工厂类
 *
 * @author CodeYang_Site
 * @version 2021/6/6 14:09
 */
public class ConcreteCreator extends Creator {


    /**
     * 创建一个产品,其输入参数当然可以自己控制
     * 通常为String,Enum,Class .... 还可以为null
     *
     * @param cls
     * @return
     */
    @Override
    public <T extends Product> T createProduct(Class<T> cls) {
        //可以在这里强制限制返回类,也可以在接口层出阿里为强制返回类型,这样这个抽象工厂就只有我可以这个标准里面可以继续使用下去

        Product instance = null;
        try {
            // 使用反射得到具体对象实例
            instance = (Product) Class.forName(cls.getName()).newInstance();
        } catch (Exception e) {
            System.out.println("生产错误");
            e.printStackTrace();
        }
        return (T) instance;
    }
}
